﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Arthus
{
    public partial class kalkulacijaForma : Form
    {
        public static int IDzaglavlja;
        public static int idPartnera;
        public kalkulacijaForma(int zaglavljeID, int partnerID)
        {
            InitializeComponent();
            IDzaglavlja = zaglavljeID;
            idPartnera = partnerID;

            dateTimePickerDatumUnosa.Value = System.DateTime.Now;
            dateTimePickerDatumDokumenta.Value = System.DateTime.Now;
            dateTimePickerDatumDospeca.Value = System.DateTime.Now;

            posjedObjekat.PopuniComboBoxVeleprodaja(comboBoxProdajnaJedinica);

            checkBoxAutoBrojDokumenta.Checked = true;
            ProveraProknjizenostiKalkulacije();
        }

        Posjed posjedObjekat = new Posjed();
        ZAG zagObjekat = null;
        Partneri partneriObjekat = null;
        STV stvObjekat = null;
        Arthus.Kalkulacija.stavkaKalkulacije stavkaKalkulacijeObjekat = null;

        private void PromenaCheckBoxAutoBrojDokumenta()
        { //metoda koja menja vizibilnost textbox-ova automatskog broja dokumenta
            if (checkBoxAutoBrojDokumenta.Checked == true)
            {
                //ako je cekiran checkBoxAutoBrojDokumenta
                textBoxAutomatskiBrojDokumenta1.Enabled = false;
                textBoxAutomatskiBrojDokumenta2.Enabled = false;
            }
            else
            {
                //ako nije cekiran
                textBoxAutomatskiBrojDokumenta1.Enabled = true;
                textBoxAutomatskiBrojDokumenta2.Enabled = true;
            }
        }
        private void checkBoxAutoBrojDokumenta_CheckedChanged(object sender, EventArgs e)
        {
            PromenaCheckBoxAutoBrojDokumenta();
        }

        private void PromenaCheckBoxIzborPartnera()
        { //metoda koja menja vizibilnost textbox-ova automatskog broja dokumenta
            if (checkBoxIzborPartnera.Checked == true)
            {
                //ako je cekiran checkBoxAutoBrojDokumenta
                textBoxIzborPartnera.Enabled = true;
                textBoxSifraPartnera.Text = "";
                textBoxNazivPartnera.Text = "";
                textBoxMestoPartnera.Text = "";
            }
            else
            {
                //ako nije cekiran
                textBoxIzborPartnera.Enabled = false;
            }
        }
        private void checkBoxIzborPartnera_CheckedChanged(object sender, EventArgs e)
        {
            PromenaCheckBoxIzborPartnera();
        }

        public void ProveraProknjizenostiKalkulacije()
        {
            zagObjekat = new ZAG();
            if (IDzaglavlja == 0)
            {
                buttonUnesi.Enabled = true;
                buttonIzmeni.Enabled = false;
                buttonDodajStavku.Enabled = false;
                buttonIzmeniStavku.Enabled = false;
                buttonObrisiStavku.Enabled = false;
                buttonKnjizenje.Enabled = false;

                comboBoxProdajnaJedinica.Enabled = true;
                textBoxAutomatskiBrojDokumenta1.ReadOnly = false;
                textBoxAutomatskiBrojDokumenta2.ReadOnly = false;

                checkBoxAutoBrojDokumenta.Enabled = true;
                checkBoxIzborPartnera.Enabled = true;
                checkBoxObveznikPDV.Enabled = true;

                if (textBoxSifraPartnera.Text.Length <= 0)
                {
                    buttonUnesi.Enabled = false;
                }
                else
                {
                    buttonUnesi.Enabled = true;
                }
            }
            else if (zagObjekat.ProveraProknjizenDokumentIliNe(kalkulacijaForma.IDzaglavlja))
            {
                labelProknjizenIliNe.Text = "Kalkulacija je proknjižena";
                buttonUnesi.Enabled = false;
                buttonIzmeni.Enabled = false;
                buttonDodajStavku.Enabled = false;
                buttonIzmeniStavku.Enabled = false;
                buttonObrisiStavku.Enabled = false;
                buttonKnjizenje.Enabled = true;

                comboBoxProdajnaJedinica.Enabled = false;
                textBoxAutomatskiBrojDokumenta1.ReadOnly = true;
                textBoxAutomatskiBrojDokumenta2.ReadOnly = true;

                checkBoxAutoBrojDokumenta.Enabled = false;
                checkBoxIzborPartnera.Enabled = false;
                checkBoxObveznikPDV.Enabled = false;
            }
            else
            {
                labelProknjizenIliNe.Text = "Kalkulacija nije proknjižena";
                buttonUnesi.Enabled = false;
                buttonIzmeni.Enabled = true;
                buttonDodajStavku.Enabled = true;
                buttonIzmeniStavku.Enabled = true;
                buttonObrisiStavku.Enabled = true;
                buttonKnjizenje.Enabled = true;
                if (dataGridViewStavkeKalkulacije.RowCount <= 0)
                {
                    buttonDodajStavku.Enabled = true;
                    buttonIzmeniStavku.Enabled = false;
                    buttonObrisiStavku.Enabled = false;
                    buttonKnjizenje.Enabled = false;
                }
                checkBoxAutoBrojDokumenta.Enabled = true;
                checkBoxIzborPartnera.Enabled = true;
                checkBoxObveznikPDV.Enabled = true;
            }
        }

        /*private void SaberiOsnovice() {
            decimal osnovica = Convert.ToDecimal(textBoxOsnovicaVisaTarifa.Text) + Convert.ToDecimal(textBoxOsnovicaNizaTarifa.Text) + Convert.ToDecimal(textBoxOsnovicaOtkup.Text);
            textBoxOsnovicaBezPDV.Text = String.Format("{0:0.00}", osnovica);
        }*/
        private void IzracunajPDVove()
        {
            if (textBoxOsnovicaVisaTarifa.Text.Trim().Length > 0 && textBoxPDVvisaTarifa.Text.Trim().Length > 0 && textBoxOsnovicaNizaTarifa.Text.Trim().Length > 0 &&
                textBoxPDVnizaTarifa.Text.Trim().Length > 0 && textBoxOsnovicaOtkup.Text.Trim().Length > 0 && textBoxPDVOtkup.Text.Trim().Length > 0 &&
                textBoxOsnovicaBezPDV.Text.Trim().Length > 0)
            {
                Tarifa tarifaObjekat = new Tarifa();
                decimal visaTarifa = Convert.ToDecimal(textBoxOsnovicaVisaTarifa.Text) * tarifaObjekat.VratiStopuPDVNaOsnovuIDINajnovijegDatuma(1) / 100;
                decimal nizaTarifa = Convert.ToDecimal(textBoxOsnovicaNizaTarifa.Text) * tarifaObjekat.VratiStopuPDVNaOsnovuIDINajnovijegDatuma(2) / 100;

                textBoxPDVvisaTarifa.Text = String.Format("{0:0.00}", visaTarifa);
                textBoxPDVnizaTarifa.Text = String.Format("{0:0.00}", nizaTarifa);
            }
        }
        private void kalkulacijaForma_Load(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            zagObjekat.PopuniKontroleKalkulacije(dateTimePickerDatumUnosa, comboBoxProdajnaJedinica, textBoxAutomatskiBrojDokumenta1, textBoxAutomatskiBrojDokumenta2,
                textBoxPoDokumentu, dateTimePickerDatumDokumenta, dateTimePickerDatumDospeca, IDzaglavlja.ToString(), textBoxOsnovicaVisaTarifa, textBoxPDVvisaTarifa,
                textBoxOsnovicaNizaTarifa, textBoxPDVnizaTarifa, textBoxOsnovicaOtkup, textBoxPDVOtkup, textBoxOsnovicaBezPDV);
            //ProveraProknjizenostiKalkulacije();
        }

        private void buttonZatvori_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void kalkulacijaForma_FormClosing(object sender, FormClosingEventArgs e)
        {
            IDzaglavlja = 0;
        }

        private void kalkulacijaForma_Activated(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            zagObjekat.PopuniKontroleKalkulacije(dateTimePickerDatumUnosa, comboBoxProdajnaJedinica, textBoxAutomatskiBrojDokumenta1, textBoxAutomatskiBrojDokumenta2,
                textBoxPoDokumentu, dateTimePickerDatumDokumenta, dateTimePickerDatumDospeca, IDzaglavlja.ToString(), textBoxOsnovicaVisaTarifa, textBoxPDVvisaTarifa,
                textBoxOsnovicaNizaTarifa, textBoxPDVnizaTarifa, textBoxOsnovicaOtkup, textBoxPDVOtkup, textBoxOsnovicaBezPDV);
            partneriObjekat = new Partneri();
            partneriObjekat.PopuniKontrolePartnera(kalkulacijaForma.idPartnera, textBoxSifraPartnera, textBoxNazivPartnera, textBoxMestoPartnera, checkBoxObveznikPDV);
            stvObjekat = new STV();
            stvObjekat.StavkeKalkulacijePopuniGridView(dataGridViewStavkeKalkulacije, zagObjekat.VratiMagacacinIDNaOsnovuZAGID(IDzaglavlja));
            SaberiVrednosti();
            ProveraProknjizenostiKalkulacije();
        }

        private void textBoxIzborPartnera_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.Cursor = Cursors.WaitCursor;
                partneriObjekat = new Partneri();
                partneriObjekat.PretragaPartneraKalkulacijaIzlazniRacun(textBoxIzborPartnera, textBoxSifraPartnera, textBoxNazivPartnera, textBoxMestoPartnera, checkBoxObveznikPDV);
                this.Cursor = Cursors.Default;
            }
            ProveraProknjizenostiKalkulacije();
            TABKaoENTER(e);
        }

        private void buttonUnesi_Click(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            zagObjekat.UbaciUZAGzaVUR("VUR", dateTimePickerDatumUnosa, comboBoxProdajnaJedinica, textBoxAutomatskiBrojDokumenta1, textBoxAutomatskiBrojDokumenta2,
                textBoxPoDokumentu, dateTimePickerDatumDokumenta, dateTimePickerDatumDospeca, idPartnera, textBoxOsnovicaVisaTarifa, textBoxPDVvisaTarifa,
                textBoxOsnovicaNizaTarifa, textBoxPDVnizaTarifa, textBoxOsnovicaOtkup, textBoxPDVOtkup, textBoxOsnovicaBezPDV);
            ProveraProknjizenostiKalkulacije();
        }

        private void textBoxOsnovicaVisaTarifa_KeyUp(object sender, KeyEventArgs e)
        {
            //SaberiOsnovice();
            IzracunajPDVove();
            SaberiVrednosti();
        }
        private void textBoxOsnovicaNizaTarifa_KeyUp(object sender, KeyEventArgs e)
        {
            //SaberiOsnovice();
            IzracunajPDVove();
            SaberiVrednosti();
        }
        private void textBoxOsnovicaOtkup_KeyUp(object sender, KeyEventArgs e)
        {
            //SaberiOsnovice();
            SaberiVrednosti();
        }
        private void textBoxOsnovicaBezPDV_KeyUp(object sender, KeyEventArgs e)
        {
            SaberiVrednosti();
        }

        private void TABKaoENTER(KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                e.SuppressKeyPress = true;
                SelectNextControl(ActiveControl, true, true, true, true);
            }
        }
        private void dateTimePickerDatumUnosa_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void comboBoxProdajnaJedinica_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxPoDokumentu_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void dateTimePickerDatumDokumenta_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void dateTimePickerDatumDospeca_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxOsnovicaVisaTarifa_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxOsnovicaNizaTarifa_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxOsnovicaOtkup_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }

        private void buttonIzmeni_Click(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            zagObjekat.IzmeniUZAGzaVUR("VUR", dateTimePickerDatumUnosa, comboBoxProdajnaJedinica, textBoxAutomatskiBrojDokumenta1, textBoxAutomatskiBrojDokumenta2,
                textBoxPoDokumentu, dateTimePickerDatumDokumenta, dateTimePickerDatumDospeca, idPartnera, textBoxOsnovicaVisaTarifa, textBoxPDVvisaTarifa,
                textBoxOsnovicaNizaTarifa, textBoxPDVnizaTarifa, textBoxOsnovicaOtkup, textBoxPDVOtkup, textBoxOsnovicaBezPDV);
        }

        private void buttonDodajStavku_Click(object sender, EventArgs e)
        {
            stavkaKalkulacijeObjekat = new Kalkulacija.stavkaKalkulacije(0, "");
            stavkaKalkulacijeObjekat.ShowDialog();

            zagObjekat = new ZAG();
            zagObjekat.PopuniKontroleKalkulacije(dateTimePickerDatumUnosa, comboBoxProdajnaJedinica, textBoxAutomatskiBrojDokumenta1, textBoxAutomatskiBrojDokumenta2,
                textBoxPoDokumentu, dateTimePickerDatumDokumenta, dateTimePickerDatumDospeca, IDzaglavlja.ToString(), textBoxOsnovicaVisaTarifa, textBoxPDVvisaTarifa,
                textBoxOsnovicaNizaTarifa, textBoxPDVnizaTarifa, textBoxOsnovicaOtkup, textBoxPDVOtkup, textBoxOsnovicaBezPDV);
            //ovde ubaci popuni gridview
            /**/
            //ProveraProknjizenostiKalkulacije();
            stavkaKalkulacijeObjekat.Dispose();
        }

        private void buttonIzmeniStavku_Click(object sender, EventArgs e)
        {
            stavkaKalkulacijeObjekat = new Kalkulacija.stavkaKalkulacije(Convert.ToInt32(dataGridViewStavkeKalkulacije.SelectedRows[0].Cells[1].Value.ToString()),
                dataGridViewStavkeKalkulacije.SelectedRows[0].Cells[5].Value.ToString());
            stavkaKalkulacijeObjekat.ShowDialog();
        }

        private void dataGridViewStavkeKalkulacije_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            stavkaKalkulacijeObjekat = new Kalkulacija.stavkaKalkulacije(Convert.ToInt32(dataGridViewStavkeKalkulacije.SelectedRows[0].Cells[1].Value.ToString()),
                dataGridViewStavkeKalkulacije.SelectedRows[0].Cells[5].Value.ToString());
            stavkaKalkulacijeObjekat.ShowDialog();
        }

        private void buttonKnjizenje_Click(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            int finID = zagObjekat.VratiIDFINnalogaNaOsnovuZAGID(IDzaglavlja);
            if (zagObjekat.VratiVrstuZaglavljaNaOsnovuID(IDzaglavlja).Equals("VUR")) {
                this.Cursor = Cursors.WaitCursor;
                decimal racunUkupno=Convert.ToDecimal(textBoxRacunUkupno.Text);
                decimal pdvVisaTarifa=Convert.ToDecimal(textBoxPDVvisaTarifa.Text);
                decimal pdvNizaTarifa=Convert.ToDecimal(textBoxPDVnizaTarifa.Text);
                decimal vrednosti=0.00m;
                decimal zbirNivelacija=0.00m;
                decimal zbirRuc=0.00m;
                decimal zbirNabavnihVrednosti = 0.00m;
                if(dataGridViewStavkeKalkulacije.RowCount>0)
                {
                    for(int i=0; i<dataGridViewStavkeKalkulacije.Rows.Count;i++)
                    {
                        vrednosti+=Convert.ToDecimal(dataGridViewStavkeKalkulacije.Rows[i].Cells[8].Value.ToString());
                        zbirNivelacija+=Convert.ToDecimal(dataGridViewStavkeKalkulacije.Rows[i].Cells[9].Value.ToString());
                        zbirRuc+=Convert.ToDecimal(dataGridViewStavkeKalkulacije.Rows[i].Cells[10].Value.ToString());
                        zbirNabavnihVrednosti += Convert.ToDecimal(dataGridViewStavkeKalkulacije.Rows[i].Cells[11].Value.ToString());
                    }
                }
                knjizenjeDokumenataForma knjizenjeKalkulacijaFormaObjekat = new knjizenjeDokumenataForma(IDzaglavlja.ToString(), finID, racunUkupno, pdvVisaTarifa, pdvNizaTarifa, 
                    vrednosti, zbirNivelacija, zbirRuc, zbirNabavnihVrednosti, dateTimePickerDatumDokumenta.Value.ToString("yyyy-MM-dd"), 
                    dateTimePickerDatumDospeca.Value.ToString("yyyy-MM-dd"));
                knjizenjeKalkulacijaFormaObjekat.ShowDialog();
                this.Cursor = Cursors.Default;
            }
        }

        private void buttonObrisiStavku_Click(object sender, EventArgs e)
        {
            stvObjekat = new STV();
            stvObjekat.ObrisiStavkuPremaID(Convert.ToInt32(dataGridViewStavkeKalkulacije.SelectedRows[0].Cells[1].Value.ToString()));
            MessageBox.Show("Stavka je uspešno obrisana ");
        }

        private void buttonStampanje_Click(object sender, EventArgs e)
        {
            if (dataGridViewStavkeKalkulacije.RowCount > 0)
            {
                zagObjekat = new ZAG();
                this.Cursor = Cursors.WaitCursor;
                Kalkulacija.kalkulacijaStampanjeForma kalkulacijaStampanjeFormaObjekat = new Kalkulacija.kalkulacijaStampanjeForma(dataGridViewStavkeKalkulacije.Rows[0].Cells[1].Value.ToString(),
                    dataGridViewStavkeKalkulacije.Rows[dataGridViewStavkeKalkulacije.RowCount - 1].Cells[1].Value.ToString(),
                    zagObjekat.VratiMagacacinIDNaOsnovuZAGID(IDzaglavlja), zagObjekat.VratiPreduzeceIDNaOsnovuZAGID(IDzaglavlja));
                kalkulacijaStampanjeFormaObjekat.ShowDialog();
                this.Cursor = Cursors.Default;
            }
            else
            {
                MessageBox.Show("Morate imati neke stavke da bi ste štampali");
            }
        }

        private void SaberiVrednosti()
        {
            if (textBoxOsnovicaVisaTarifa.Text.Trim().Length > 0 && textBoxPDVvisaTarifa.Text.Trim().Length > 0 && textBoxOsnovicaNizaTarifa.Text.Trim().Length > 0 &&
                textBoxPDVnizaTarifa.Text.Trim().Length > 0 && textBoxOsnovicaOtkup.Text.Trim().Length > 0 && textBoxPDVOtkup.Text.Trim().Length > 0 &&
                textBoxOsnovicaBezPDV.Text.Trim().Length > 0)
            {
                decimal osnovicaUkupno = Convert.ToDecimal(textBoxOsnovicaVisaTarifa.Text) + Convert.ToDecimal(textBoxOsnovicaNizaTarifa.Text) + Convert.ToDecimal(
                    textBoxOsnovicaBezPDV.Text) + Convert.ToDecimal(textBoxOsnovicaOtkup.Text);
                decimal PDVukupno = Convert.ToDecimal(textBoxPDVvisaTarifa.Text) + Convert.ToDecimal(textBoxPDVnizaTarifa.Text) + Convert.ToDecimal(textBoxPDVOtkup.Text);
                decimal racunUkupno = osnovicaUkupno + PDVukupno;
                textBoxOsnovicaUkupno.Text = string.Format("{0:0.00}", osnovicaUkupno);
                textBoxPDVUkupno.Text = string.Format("{0:0.00}", PDVukupno);
                textBoxRacunUkupno.Text = string.Format("{0:0.00}", racunUkupno);
            }
        }

        private void textBoxOsnovicaVisaTarifa_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxPDVvisaTarifa_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxOsnovicaNizaTarifa_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxPDVnizaTarifa_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxOsnovicaOtkup_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxPDVOtkup_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxOsnovicaBezPDV_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }

        private void textBoxAutomatskiBrojDokumenta1_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliSamoBrojeve(sender, e);
        }
        private void textBoxAutomatskiBrojDokumenta2_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliSamoBrojeve(sender, e);
        }
    }
}
